import axios from 'axios'
import qs from 'query-string'
// import store from '@/store'
import AUTH from '@/utils/auth'

const apiBase = $globalconfig.URLS.API
const getToken = () => AUTH.getToken()

// 845定制
const isLanjiukj = $globalconfig.MODULES.IS_LANJIUKJ_PROGRAM_OPEN

axios.defaults.baseURL = apiBase
axios.defaults.timeout = 0
// axios.defaults.retry = 2
// axios.defaults.retryDelay = 5000

axios.interceptors.request.use(function (config) {
  return config
}, function (err) {
  return Promise.reject(err)
})

axios.interceptors.response.use(function (response) {
  return response
}, function (err) {
  try {
    let obj = JSON.parse(JSON.stringify(err))
    if (obj && obj.response && obj.response.status === 401) {
      AUTH.delCookie()
    }
  } catch (error) {
    console.log(error)
  }
  return Promise.reject(err)
})

// axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
//   var config = err.config
//   if (!config || !config.retry) return Promise.reject(err)

//   config.__retryCount = config.__retryCount || 0

//   if (config.__retryCount >= config.retry) {
//     // store.dispatch('hideLoading')
//     return Promise.reject(err)
//   }

//   config.__retryCount += 1

//   var backoff = new Promise(function (resolve) {
//     setTimeout(function () {
//       resolve()
//     }, config.retryDelay || 3000)
//   })

//   return backoff.then(function () {
//     return axios(config)
//   })
// })

// 获取微信授权信息
/* 2、PC端授权地址生成二维码方式
  https://cloud.vgoyun.com/wxmp/company/authorize?company_id=239290864893952&qrcode_scene_key=
  其中**qrcode_scene_key**为32位随机字符串（推荐GUID），并且此地址请自行调用qrcode生成图片地址。
  PC端页面通过调用轮询接口来获取登录信息，即【公司公众号相关接口.md】**### 6. 获取PC端扫码授权公众号用户登录信息**
*/
let guid
export function getWXScanLoginUrl () {
  guid = ''
  for (let i = 1; i <= 32; i++) {
    guid += Math.floor(Math.random() * 16.0).toString(16)
  }
  return `${apiBase}oauth/mp/authorize?qrcode_scene_key=${guid}`
}

// 6. 获取PC端扫码授权公众号用户登录信息 （GetWxMpQrcodeAuthorizerAsync）
// 备注 |  本接口为长轮询链接，服务器会挂起30秒，若30秒内有扫码结果则直接返回，若没有则等本次请求完后才开始下一次查询
// qrcode_scene_key | String | 是 |  随机字符标识，长度为32个字符串（此为请求PC授权二维码图片时候传输的qrcode_scene_key）
export function getWXScanLoginStatus () {
  return axios.get(`${apiBase}oauth/mp/qrcode/authorizer?qrcode_scene_key=${guid}`)
}

// 获取二维码
export function getQrcodeUrl (url) {
  return apiBase + `common/qrcode/?data=${encodeURIComponent(url)}&logo=`
}

// 获取用户信息
export function getUserInfoAsync() {
  return axios.get(apiBase + 'api/user/session', {
    params: {
      token: getToken()
    }
  })
}

// 获取指定ID总览图 api/view/get_overview
export function getOverview(_id) {
  if ($globalconfig.isHaiMeng) {
    return axios.post(apiBase + 'api/view/get_overview', qs.stringify({
      overview_id: _id
    }))
  } else {
    return axios.get(apiBase + 'plugins/api/panorama/user/view/overviews/' + _id,)
  }
}

// 获取所有作品
export function getAllPano(panoId) {
  return axios.post(apiBase + 'api/view/get_panointegration', qs.stringify({
    pano_id: panoId
  }))
}

// 获取作品基础数据
// export function getPanoInfo(panoId) {
//   return axios.post(apiBase + 'api/view/get_panoinfo', qs.stringify({
//     pano_id: panoId
//   }))
// }

// 获取作品基础数据(新)
export function getPanoInfo(panoId) {
  let url = `${apiBase}api/view/panos/${panoId}`
  if (isLanjiukj) {
    url = `${apiBase}api/view/panos/${panoId}?token=${getToken() || ''}`
  }
  return axios.get(url)
}

/**
 * 微信插件接口
 */

// 获取网页微信配置
export function getAddCard(card_id, url) {
  return axios.get(`${$globalconfig.URLS.PLUGIN_API}api/cards/jssdk/getaddcard`, {
    params: {
      card_id: card_id,
      url: url,
      token: getToken()
    }
  })
}

// 获取卡券图片地址
export function getCardImage(mmbiz_url) {
  return axios.get(`${$globalconfig.URLS.PLUGIN_API}api/cards/mmbiz/${mmbiz_url}`)
}

// 获取指定ID卡券信息
export function getCardInfo(id) {
  return axios.get(`${$globalconfig.URLS.PLUGIN_API}api/cards/${id}`, {
    params: {
      token: getToken()
    }
  })
}

// 获取卡券列表
export function getCardsList(page, pageSize) {
  return axios.get(`${$globalconfig.URLS.PLUGIN_API}api/cards/${page}/${pageSize}`, {
    params: {
      token: getToken()
    }
  })
}

// 获取作品中的卡卷
export function getWxCards(fkPanoId) {
  return axios.post(apiBase + 'api/view/get_panowxcard', qs.stringify({
    fk_pano_id: fkPanoId
  }))
}

// 用户签名
export function authorize(panoId, returnUrl) {
  return axios.get('authorize/get', {
    params: {
      panoId: panoId,
      returnUrl: returnUrl
    }
  })
}

// 访客信息
export function getCustomInfo(opts) {
  return axios.get(apiBase + 'api/browse/addlog', {
    params: {
      sw: opts.sw,
      sh: opts.sh,
      ip: opts.ip,
      region: opts.region,
      city: opts.city,
      type: opts.type,
      panoid: opts.panoid,
      userid: opts.userid
    }
  })
}
// 访客信息(overview)
export function getCustomInfoOvv(opts) {
  return axios.post(apiBase + 'plugins/api/overview/browses', {
    sw: opts.sw,
    sh: opts.sh,
    ip: opts.ip,
    region: opts.region,
    city: opts.city,
    type: opts.type,
    overview_id: opts.overview_id,
    user_id: opts.userid,
    type_id: opts.type_id,
  })
}
// login
export function login(opts) {
  return axios.post(apiBase + 'api/userlogin/login', qs.stringify({
    username: opts.username,
    password: opts.password,
    signature: opts.signature,
    timestamp: opts.timestamp,
    nonce: opts.nonce
  }))
}

// 获取加载动画
export function getPanoLoad(panoid, loadId) {
  return axios.post(apiBase + 'api/view/get_panoload', qs.stringify({
    pano_id: panoid,
    load_id: loadId
  }))
}

// 获取小地图
export function getMiniMaps(panoid) {
  return axios.post(apiBase + 'api/view/get_panomaps', qs.stringify({
    pano_id: panoid
  }))
}

// 获取图文描述
export function getGraphicDescript(matId) {
  return axios.post(apiBase + 'api/view/get_matinfo', qs.stringify({
    mat_id: matId
  }))
}

// 获取菜单
export function getNavMenu(panoid) {
  return axios.post(apiBase + 'api/view/get_navmenu', qs.stringify({
    pano_id: panoid
  }))
}

// 获取场景热点
export function getHotPoint(sceneId) {
  return axios.post(apiBase + 'api/view/get_hotspot', qs.stringify({
    scene_id: sceneId
  }))
}
// export function getHotPoint(sceneId) {
//   return axios.get(`${apiBase}plugins/api/panorama/view/scenes/${sceneId}/hotspots`)
// }

// 获取语音导起点和终点
export function getGuideCustomPos(panoid) {
  return axios.post(apiBase + 'api/view/get_customize_position', qs.stringify({
    pano_id: panoid
  }))
}

// 获取一键导览
export function getNavGuide(panoid) {
  return axios.post(apiBase + 'api/view/get_nav', qs.stringify({
    pano_id: panoid,
    token: getToken()
  }))
}

// 获取语音导航语音和图片
export function getGuideCustomVoice(panoid) {
  return axios.post(apiBase + 'api/view/get_customize_voice', qs.stringify({
    pano_id: panoid
  }))
}

// 添加场景分组
export function addPanoGroup(panoid, album) {
  return axios.post(apiBase + 'api/view/add_pano_group', qs.stringify({
    pano_id: panoid,
    album: album
  }))
}

// 获取场景分组
export function getSceneGroup(panoid) {
  return axios.post(apiBase + 'api/view/get_pano_group', qs.stringify({
    pano_id: panoid
  }))
}

// 获取付费场景
export function getScenePay(panoid) {
  return axios.post(apiBase + 'api/view/check_panopay', qs.stringify({
    pano_id: panoid,
    token: getToken()
  }))
}

// 删除场景分组
export function removePanoGroup(panoid, groupIdpanoId) {
  return axios.post(apiBase + 'api/view/remove_pano_group', qs.stringify({
    pano_id: panoid,
    groupid: groupId
  }))
}

// 评论
export function addSay(opts) {
  return axios.post(apiBase + 'api/viewsubmit/add_say', qs.stringify({
    pano_id: opts.pano_id,
    scene_id: opts.scene_id,
    type_id: opts.type_id,
    openid: opts.openid,
    avatar: opts.avatar,
    nickname: opts.nickname,
    content: opts.content,
    ath: opts.ath,
    atv: opts.atv,
    token: getToken()
  }))
}

// 收藏
export function addCollect(panoId) {
  return axios.post(apiBase + 'api/viewsubmit/add_collect', qs.stringify({
    pano_id: panoId,
    token: getToken()
  }))
}

// 点赞
export function addPraise(panoId) {
  return axios.post(apiBase + 'api/view/add_praise', qs.stringify({
    pano_id: panoId,
    token: getToken()
  }))
}

// 获取状态
export function getCollectStatus(panoId) {
  return axios.post(apiBase + 'api/view/get_statu', qs.stringify({
    pano_id: panoId,
    token: getToken()
  }))
}

// 获取导览地图列表
export function getPanoMap(panoId) {
  return axios.post(apiBase + 'api/view/get_panomaps', qs.stringify({
    pano_id: panoId
  }))
}

// 商品详情
export function getProductInfo(productId) {
  return axios.post(apiBase + 'api/view/get_productinfo', qs.stringify({
    product_id: productId
  }))
}

// 获取已付款订单
export function getProductOrderList(pageIndex, pageSize) {
  return axios.get(apiBase + 'api/userbuyer/productorder/list', {
    params: {
      pageIndex: pageIndex || 1,
      pageSize: pageSize || 10,
      status: -1,
      token: getToken()
    }
  })
}

// 获取商品评分
export function getProductGrade(productId) {
  return axios.post(apiBase + 'api/view/get_productgrade', qs.stringify({
    fk_product_id: productId,
    token: getToken()
  }))
}

// 添加商品评分
export function addProductGrade(opts) {
  return axios.post(apiBase + 'api/viewsubmit/add_productgrade', qs.stringify({
    fk_product_id: opts.productId,
    fk_order_id: opts.orderId,
    contents: opts.contents,
    service_score: opts.serviceScore,
    product_score: opts.productScore,
    post_score: opts.postScore,
    token: getToken()
  }))
}

// 购物车列表
export function getCartList(pageIndex, pageSize, sellerId) {
  return axios.get(apiBase + 'api/userbuyer/productcart/list', {
    params: {
      pageIndex: pageIndex,
      pageSize: pageSize,
      sellerid: sellerId,
      token: getToken()
    }
  })
}

// 添加购物车
export function addToCart(productId, num) {
  return axios.post(apiBase + 'api/userbuyer/productcart/add', qs.stringify({
    productid: productId,
    num: num,
    token: getToken()
  }))
}
// 更新购物车
export function updateCart(cartId, num) {
  return axios.post(apiBase + 'api/userbuyer/productcart/update', qs.stringify({
    cartid: cartId,
    num: num,
    token: getToken()
  }))
}

// 删除购物车中的商品
export function deleteToCart(cartId) {
  return axios.post(apiBase + 'api/userbuyer/productcart/delete', qs.stringify({
    cartid: cartId,
    token: getToken()
  }))
}

// 地址列表
export function getAddress() {
  return axios.get(apiBase + 'api/userbuyer/address/list', {
    params: {
      token: getToken()
    }
  })
}

// 添加或更新地址
export function addOrUpdateAddress(opts) {
  return axios.post(apiBase + 'api/userbuyer/address/addorset', qs.stringify({
    addressid: opts.addressid,
    province: opts.province,
    city: opts.city,
    number: opts.number,
    address: opts.address,
    name: opts.name,
    mobile: opts.mobile,
    token: getToken()
  }))
}

// 删除地址
export function deleteAddress(addressid) {
  return axios.post(apiBase + 'api/userbuyer/address/delete', qs.stringify({
    addressid: addressid,
    token: getToken()
  }))
}

// 创建订单
export function createProductOrder(cartIds, addressId) {
  return axios.post(apiBase + 'api/userbuyer/productorder/create', qs.stringify({
    cartids: cartIds,
    addressid: addressId,
    token: getToken()
  }))
}

// 获取指定红包的信息
export function getWelfare(packetId) {
  return axios.get(apiBase + 'api/editor/redpacket/get', {
    params: {
      packetid: packetId,
      token: getToken()
    }
  })
}

// 抢指定作品的红包
export function grabWelfare(packetId, phone = '', code = '') {
  return axios.post(apiBase + 'api/editor/redpacket/pano/grab', qs.stringify({
    packetid: packetId,
    phone,
    code,
    token: getToken()
  }))
}

// 领取红包记录
export function grablistWelfare(pageIndex, pageSize) {
  return axios.get(apiBase + 'api/editor/redpacket/grablist', {
    params: {
      pageIndex: pageIndex || 1,
      pageSize: pageSize || 10,
      token: getToken()
    }
  })
}
// 是否关注公众号
export function getSubscribe(openId) {
  return axios.get(apiBase + 'api/wxopen/subscribe/get', {
    params: {
      openid: openId
    }
  })
}

// 打赏 付款
export function payOrder(opts) {
  return axios.post(apiBase + 'api/payorder/create', qs.stringify({
    pano_id: opts.pano_id,
    ordertype: opts.ordertype || 3,
    paytype: opts.paytype || 3,
    productid: opts.productid,
    totalfee: opts.totalfee * 100,
    return_url: encodeURIComponent(opts.return_url),
    iswx: opts.iswx,
    token: getToken(),
  }))
}

// 获取广告
export function getAd(panoId) {
  return axios.post(apiBase + 'api/view/get_ad', qs.stringify({
    pano_id: panoId
  }))
}

// 记录广告展示次数
export function setAdShowTime(panoId, adid, adtype) {
  return axios.post(apiBase + 'api/view/set_ad', qs.stringify({
    pano_id: panoId, // 作品id
    adid,
    adtype // 0是作品广告，1是平台联盟广告
  }))
}

// 记录广告点击次数
export function setAdClickTime(panoId, adid, adtype) {
  return axios.post(apiBase + 'api/view/click_ad', qs.stringify({
    pano_id: panoId, // 作品id
    adid,
    adtype // 0是作品广告，1是平台联盟广告
  }))
}

// 获取账户
export function getBalance(panoId) {
  return axios.get(apiBase + 'api/user/session', {
    params: {
      pano_id: panoId,
      token: getToken()
    }
  })
}

// 确认广告已投放，扣款  adtype 0 作品广告 1 联盟广告
export function setAd(panoId, adId, adType) {
  return axios.post(apiBase + 'api/view/set_ad', qs.stringify({
    pano_id: panoId,
    adid: adId,
    adtype: adType
  }))
}

// 获取弹幕
export function getBarrage(panoId) {
  return axios.post(apiBase + 'api/view/get_barrage', qs.stringify({
    pano_id: panoId,
    token: getToken()
  }))
}

// 添加弹幕
export function addBarrage(opts) {
  return axios.post(apiBase + 'api/viewsubmit/add_barrage', qs.stringify({
    pano_id: opts.panoId,
    content: opts.content,
    avatar: opts.avatar,
    nickname: opts.nickname,
    openid: opts.openid,
    token: getToken()
  }))
}

// 获取总览图微信分享
export function getOverviewWXShare(url) {
  return axios.get(apiBase + 'api/wxplat/jssdk/wxconfig', {
    params: {
      url: url
    }
  })
}

// 获取微信分享参数
// export function getWxShare(url) {
//   return axios.get(apiBase + 'api/wxopen/share/get', {
//     params: {
//       url: url
//     }
//   })
// }

// 俊熙 获取公司信息
export function getCompanyInfo(opts) {
  return axios.get(apiBase + `api/zaigou/front/panos/${opts.panoId}`, {
    params: {
      user_id: opts.userId
    }
  })
}

// 俊熙 获取当前作品相关案例
export function getRelativePano(opts) {
  return axios.get(apiBase + `api/zaigou/front/panos/${opts.page}/${opts.pageSize}`, {
    params: {
      tag_id: opts.tagId,
      user_id:opts.user_id,
      keyword:opts.keyword
    }
  })
}

// 删除说一说
export function delSay(commentid) {
  return axios.post(apiBase + 'api/usercomment/delete', qs.stringify({
    comment_id: commentid,
    token: getToken()
  }))
}

// api/editor/get_sceneinfo
// 周边景点
export function getSceneInfo(scene_id) {
  return axios.post(apiBase + 'api/editor/get_sceneinfo', qs.stringify({
    scene_id: scene_id,
    token: getToken(),
  }))
}
// 获取作品集信息
export function getWorksData(id) {
  return axios.get(apiBase + `plugins/api/panorama/front/portfolios/${id}`)
}
// 获取单个物品列表信息
export function getGoodsData(id) {
  return axios.get(apiBase + `plugins/api/panorama/front/goods/${id}`)
}

// 845定制，菜单点击调用该接口
export function sendMenuClick(menu_id) {
  return axios.post(`${apiBase}api/editor/menus/watch?token=${getToken(true)}`, {
    menu_id: menu_id,
    pano_id: $VM.$route.params.panoId,
  })
}
